﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace appladen.contracts
{
    using appladen.contracts.data;
    using ebcpatterns;
    using ebcpatterns.infrastructure;
    public interface ISeiten_erstellen
    {
        event Action<IEnumerable<Seite>> Result;
        void Process(Tuple<CSVZeile, IEnumerable<CSVZeile>> message);
    }
    public interface ISeiten_speichern : IDependsOn<SharedState<IEnumerable<Seite>>>
    {
        event Action Result; void Process(IEnumerable<Seite> message);
    }
    public interface ISeite_liefern : IDependsOn<SharedState<IEnumerable<Seite>>>
    {
        event Action<Seite> Result;
        void Vor(); void Zurück(); void Erste();
    }
    public interface ISeite_erstellen_Board
    {
        event Action<Seite> Result;
        void Init(Tuple<CSVZeile, IEnumerable<CSVZeile>> message);
        void Vor(); void Zurück();
    }
    public partial class Seite_erstellen_Board : ISeite_erstellen_Board
    {
        public event Action<Seite> Result;

        private Action<Tuple<CSVZeile, IEnumerable<CSVZeile>>> _Init;
        public void Init(Tuple<CSVZeile, IEnumerable<CSVZeile>> message)
        {
            _Init(message);
        }private Action _Vor;
        public void Vor()
        {
            _Vor();
        }private Action _Zurück;
        public void Zurück()
        {
            _Zurück();
        }
        public Seite_erstellen_Board(ISeiten_erstellen Seiten_erstellen, ISeiten_speichern Seiten_speichern, ISeite_liefern Seite_liefern)
        {
            this._Init += Seiten_erstellen.Process;
            this._Vor += Seite_liefern.Vor;
            this._Zurück += Seite_liefern.Zurück;
            Seiten_erstellen.Result += Seiten_speichern.Process;
            Seiten_speichern.Result += Seite_liefern.Erste;
            Seite_liefern.Result += m => this.Result(m);
        }
    }

}
namespace appladen.contracts
{
    using appladen.contracts.data;
    public interface IDetailviewBoard
    {
        event Action Closed; void Process(Datensatz message);
    }
    public partial class DetailviewBoard : IDetailviewBoard
    {
        public event Action Closed;
        private Action<Datensatz> _Process;
        public void Process(Datensatz message)
        {
            _Process(message);
        }
        public DetailviewBoard(IDetailViewmodel DetailViewmodel)
        {
            this._Process += DetailViewmodel.Process;
            DetailViewmodel.Closed += () => this.Closed();
        }
    }

}
namespace appladen.contracts
{
    using appladen.contracts.data;
    using ebcpatterns.flow;
    using ebcpatterns.infrastructure;
    public interface IId_ermitteln
    {
        event Action<long> Result;
        void Process(Datensatz message);
    }
    public interface ICache : IDependsOn<IFactory>
    {
        event Action<IDetailviewBoard> Result;
        void Process(long message);
        void Close(IDetailviewBoard message);
    }
    public interface IHost_für_DetailviewBoard
    {
        event Action<IDetailviewBoard> Closed;
        void Process(Tuple<IDetailviewBoard, Datensatz> message);
    }
    public interface IDetails_anzeigen_Board
    {
        void Process(Datensatz message);
    }
    public partial class Details_anzeigen_Board : IDetails_anzeigen_Board
    {

        private Action<Datensatz> _Process;
        public void Process(Datensatz message)
        {
            _Process(message);
        }
        public Details_anzeigen_Board(IId_ermitteln Id_ermitteln, ICache Cache, AutoResetJoin<IDetailviewBoard, Datensatz> join2, IHost_für_DetailviewBoard Host_für_DetailviewBoard)
        {
            this._Process += Id_ermitteln.Process;
            Id_ermitteln.Result += Cache.Process;
            Cache.Result += join2.Input1;
            this._Process += join2.Input2;
            join2.Output += Host_für_DetailviewBoard.Process;
            Host_für_DetailviewBoard.Closed += Cache.Close;
        }
    }

}
namespace appladen.contracts
{
    public interface IMainboard
    {
    }
    public partial class Mainboard : IMainboard
    {


        public Mainboard(IViewmodel Viewmodel, ISeite_anzeigen_Board Seite_anzeigen_Board, IDetails_anzeigen_Board Details_anzeigen_Board)
        {
            Viewmodel.Öffne_Datei += Seite_anzeigen_Board.Process;
            Viewmodel.Vor += Seite_anzeigen_Board.Vor;
            Viewmodel.Zurück += Seite_anzeigen_Board.Zurück;
            Viewmodel.Datensatz_anzeigen += Details_anzeigen_Board.Process;
        }
    }

}
namespace appladen.contracts
{
    using appladen.contracts.data;
    using ebcpatterns.flow;
    using ebcpatterns.infrastructure;
    public interface IZeilen_lesen : IDependsOn<ITxtFileAdapter>
    {
        event Action<IEnumerable<string>> Result;
        void Process(string message);
    }
    public interface IHeader_von_Daten_trennen
    {
        event Action<string> Header;
        event Action<IEnumerable<string>> Daten;
        void Process(IEnumerable<string> message);
    }
    public interface IHeader_zerlegen
    {
        event Action<CSVZeile> Result;
        void Process(string message);
    }
    public interface IDaten_zerlegen
    {
        event Action<IEnumerable<CSVZeile>> Result;
        void Process(IEnumerable<string> message);
    }
    public interface IMap : IDependsOn<IViewmodel>
    {
        void Process(Seite message);
    }
    public interface ISeite_anzeigen_Board
    {
        void Process(string message);
        void Vor(); void Zurück();
    }
    public partial class Seite_anzeigen_Board : ISeite_anzeigen_Board
    {

        private Action<string> _Process;
        public void Process(string message)
        {
            _Process(message);
        }private Action _Vor;
        public void Vor()
        {
            _Vor();
        }private Action _Zurück;
        public void Zurück()
        {
            _Zurück();
        }
        public Seite_anzeigen_Board(IZeilen_lesen Zeilen_lesen, IHeader_von_Daten_trennen Header_von_Daten_trennen, IHeader_zerlegen Header_zerlegen, IDaten_zerlegen Daten_zerlegen, IJoin<CSVZeile, IEnumerable<CSVZeile>> join, ISeite_erstellen_Board Seite_erstellen_Board, IMap Map)
        {
            this._Process += Zeilen_lesen.Process;
            this._Vor += Seite_erstellen_Board.Vor;
            this._Zurück += Seite_erstellen_Board.Zurück;
            Zeilen_lesen.Result += Header_von_Daten_trennen.Process;
            Header_von_Daten_trennen.Header += Header_zerlegen.Process;
            Header_von_Daten_trennen.Daten += Daten_zerlegen.Process;
            Header_zerlegen.Result += join.Input1;
            Daten_zerlegen.Result += join.Input2;
            join.Output += Seite_erstellen_Board.Init;
            Seite_erstellen_Board.Result += Map.Process;
        }
    }

}
